#include "headfile.h"

#define MAX_FILTER_LENTH 41 // 定义滤波器阶数最大为40

void FIR_30(float input[SAMPLENUMBER], float output[SAMPLENUMBER], const int BL, const float B[])
{
    short i, n;
    float sum;
    float w[MAX_FILTER_LENTH]; // 延迟单元

    if (BL > MAX_FILTER_LENTH)
        return;

    memset(w, 0, sizeof(w));

    for (n = 0; n < SAMPLENUMBER; n++)
    {
        w[0] = (float)input[n];           // 新数据送延迟单元
                                          // 实现y(n)=bx(n)+b1x(n-1)+b2x(n-2)......
        for (sum = 0, i = 0; i < BL; i++) // FIR滤波，系数和延迟单元数据相乘
        {
            sum += B[i] * w[i];
        }
        output[n] = sum;             // 保持滤波结果
        for (i = BL - 1; i > 0; i--) // 更新延迟单元
        {
            w[i] = w[i - 1];
        }
    }
}
